#include <list>
#include <iostream>
using namespace std;
//
//int main()
//{
//	list<int> ll;
//	ll.push_back(1);
//	ll.push_back(2);
//	ll.push_back(2);
//	ll.push_back(4);
//	ll.push_back(6);
//
//	for (auto ch : ll)
//	{
//		cout << ch << " ";
//	}
//	cout << endl;
//
//	ll.push_front(6);
//	ll.push_front(6);
//	ll.push_front(7);
//	ll.push_front(9);
//	ll.push_front(6);
//	ll.push_front(6);
//
//	for (auto ch : ll)
//	{
//		cout << ch << " ";
//	}
//	cout << endl;
//
//	//ll.remove(6);
//	//ll.reverse();
//	//auto it = ll.begin();
//	//while (it != ll.end())
//	//{
//	//	if ((*it) % 2 == 0)
//	//	{
//	//		it = ll.erase(it);
//	//	}
//	//	else
//	//	{
//	//		++it;
//	//	}
//	//}
//
//	list<int> ll2({ 11,22,33,44,55 });
//
// 
//	ll.splice(++ll.begin(), ll2,++ll2.begin(),--ll2.end());
//
//	for (auto ch : ll)
//	{
//		cout << ch << " ";
//	}
//	cout << endl;
//
//
//	for (auto ch : ll2)
//	{
//		cout << ch << " ";
//	}
//	cout << endl;
//
//
//	return 0;
//}

#include "STL-list.h"

void test1()
{
	ssy::list<int> ll;
	ll.push_back(1);
	ll.push_back(2);
	ll.push_back(3);
	ll.push_back(4);
	ll.push_back(5);

	print(ll);
}


void test2()
{
	
	struct A
	{
		A(int aa = 0,int bb = 0)
			: a(aa)
			, b(bb)
		{

		}
		int a;
		int b;
	};

	ssy::list<A> ll;
	ll.push_back(A(11, 11));
	ll.push_back(A(22, 22));
	ll.push_back(A(33, 33));
	ll.push_back(A(44, 44));
	ll.push_back(A(55, 55));
	auto it = ll.begin();
	while (it != ll.end())
	{
		cout << it-> a << " " << it-> b << endl;

		++it;
	}
}

void test3()
{
	ssy::list<int> lt1;
	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3); 
	lt1.push_back(4);

	lt1.push_front(6);
	lt1.push_front(7);
	lt1.push_front(8);
	lt1.push_front(9);
	lt1.push_front(10);

	for (auto ch : lt1)
	{
		cout << ch << " ";
	}
	cout << endl;

	lt1.pop_back();
	lt1.pop_back();
	lt1.pop_back();
	for (auto ch : lt1)
	{
		cout << ch << " ";
	}
	cout << endl;

	lt1.pop_front();
	lt1.pop_front();
	lt1.pop_front();
	for (auto ch : lt1)
	{
		cout << ch << " ";
	}
	cout << endl;

	lt1.clear();
	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3);
	lt1.push_back(4);
	for (auto ch : lt1)
	{
		cout << ch << " ";
	}
	cout << endl;

}

void test4()
{
	ssy::list<int> lt1;
	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3);
	lt1.push_back(4);

	lt1.push_front(6);
	lt1.push_front(7);
	lt1.push_front(8);
	lt1.push_front(9);
	lt1.push_front(10);
	
	for (auto ch : lt1)
	{
		cout << ch << " ";
	}
	cout << endl;

	ssy::list<int> lt2 = lt1;
	for (auto ch : lt2)
	{
		cout << ch << " ";
	}
	cout << endl;

	lt2.push_back(666);
	lt2.push_back(666);
	lt2.push_back(666);
	lt2.push_back(666);

	lt1 = lt2;
	for (auto ch : lt1)
	{
		cout << ch << " ";
	}
	cout << endl;
	for (auto ch : lt2)
	{
		cout << ch << " ";
	}
	cout << endl;

}


int main()
{
	test4();
}